package org.zjx.factory;


import org.zjx.entity.Location;
import org.zjx.entity.Transfer;
import org.zjx.model.route.Route;
import org.zjx.pojo.RouteQueryPojo;

import java.util.List;

/**
 * 路由工厂接口
 * 定义创建各种类型路由的标准方法
 */
public interface RouteFactory {

    /**
     * 从传送数据创建基础路由
     * @param transfer 传送数据实体
     * @return 路由对象
     * @throws IllegalArgumentException 如果传送类型不支持
     */
    Route createFromTransfer(Transfer transfer);

    /**
     * 创建跑路路由
     * @param start 起点位置
     * @param end 终点位置
     * @param indoor 是否室内移动
     * @return 跑路路由对象
     * @throws IllegalArgumentException 如果起点终点不在同一场景
     */
    Route createRunningRoute(Location start, Location end, boolean indoor);


    /**
     * 为玩家创建所有可用的动态路由
     * @param routeQueryPojo 玩家数据
     * @return 可用的动态路由列表（不会返回null）
     */
    List<Route> createPlayerRoutes(RouteQueryPojo routeQueryPojo);
}